from xmlrpclib import Fault
+import XendClient
+
class XendError(Fault):
def __init__(self, value):
- Fault.__init__(self, 2, value)
+ Fault.__init__(self, XendClient.ERROR_GENERIC, value)
self.value = value
def __str__(self):
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
#============================================================================
# Copyright (C) 2006 Anthony Liguori <aliguori@us.ibm.com>
-# Copyright (C) 2006 XenSource Ltd
+# Copyright (C) 2006 XenSource Ltd.
#============================================================================
+import xmlrpclib
+
from xen.xend import XendDomain, XendDomainInfo, XendNode, \
XendLogging, XendDmesg
from xen.util.xmlrpclib2 import UnixXMLRPCServer, TCPXMLRPCServer
-from xen.xend.XendClient import XML_RPC_SOCKET
+from xen.xend.XendClient import XML_RPC_SOCKET, ERROR_INVALID_DOMAIN
def lookup(domid):
- return XendDomain.instance().domain_lookup_by_name_or_id(domid)
+ try:
+ return XendDomain.instance().domain_lookup_by_name_or_id(domid)
+ except exn:
+ log.exception(exn)
+ raise exn
def dispatch(domid, fn, args):
info = lookup(domid)
- return getattr(info, fn)(*args)
+ if info:
+ try:
+ return getattr(info, fn)(*args)
+ except exn:
+ log.exception(exn)
+ raise exn
+ else:
+ raise xmlrpclib.Fault(ERROR_INVALID_DOMAIN, domid)
def domain(domid):
info = lookup(domid)
- return info.sxpr()
+ if info:
+ try:
+ return info.sxpr()
+ except exn:
+ log.exception(exn)
+ raise exn
+ else:
+ raise xmlrpclib.Fault(ERROR_INVALID_DOMAIN, domid)
def domains(detail=1):
if detail < 1:
# (C) Copyright IBM Corp. 2005
# Copyright (C) 2004 Mike Wray
-# Copyright (c) 2005 XenSource Ltd
+# Copyright (c) 2005-2006 XenSource Ltd.
#
# Authors:
# Sean Dague <sean at dague dot net>
from xen.xm.opts import *
import console
-
+import xen.xend.XendClient
from xen.xend.XendClient import server
# getopt.gnu_getopt is better, but only exists in Python 2.3+. Use
except SystemExit:
sys.exit(1)
except xmlrpclib.Fault, ex:
- print "Error: %s" % ex.faultString
+ if ex.faultCode == xen.xend.XendClient.ERROR_INVALID_DOMAIN:
+ print "Error: the domain '%s' does not exist." % ex.faultString
+ else:
+ print "Error: %s" % ex.faultString
sys.exit(1)
except:
print "Unexpected error:", sys.exc_info()[0]